package edu.pe.cayetano.model.bo;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.dao.OperacionesComunesDAO;
import edu.pe.cayetano.dao.PeriodoAcademicoDAO;
import edu.pe.cayetano.framework.BusinessException;
import edu.pe.cayetano.framework.Configuration;
import edu.pe.cayetano.model.to.PeriodoAcademicoTO;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;

public class PeriodoAcademicoBO extends BaseBO{

	private	String		schema			= Configuration.getSchemaDB();

	/**
	 * Metodo que devuelve el nombre del periodo academico activo
	 * */
	public BResult getPeriodoAcademicoActivo() throws BusinessException{
		BResult 				retSalida		= new BResult();
		PeriodoAcademicoTO		periodoTO 		= null;
		PeriodoAcademicoDAO		periodoDAO		= null;
		try{
			conectar();
			periodoDAO	 	= new PeriodoAcademicoDAO(conn);
			periodoTO = periodoDAO.getPeriodoAcademicoActivo();
			retSalida.setObject(periodoTO);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(ConstantesSECCD.ERROR_RET);
			retSalida.setMessage("[PeriodoAcademicoBO] error en metodo getPeriodoAcademicoActivo generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(ConstantesSECCD.ERROR_RET);
				retSalida.setMessage("[PeriodoAcademicoBO] error en metodo getPeriodoAcademicoActivo generado por:"+e.getMessage());
			}
		}
		return retSalida;
	}
	
	/**
	 * Metodo que lista los periodos academicos
	 * */
	public BResult listarPeriodoAcademico() throws BusinessException{
		BResult 				retSalida		= null;
		StringBuffer 			query 			= new StringBuffer(); 
		OperacionesComunesDAO	operacionesDAO	= null;
		try{
			query = estableceQuery(ConstantesSECCD.OPERACION_LISTADO,"","");
			conectar();
			operacionesDAO	 	= new OperacionesComunesDAO(conn);
			retSalida 	= operacionesDAO.listado(query);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(ConstantesSECCD.ERROR_RET);
			retSalida.setMessage("[PeriodoAcademicoBO] error en metodo listarPeriodoAcademico generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(ConstantesSECCD.ERROR_RET);
				retSalida.setMessage("[PeriodoAcademicoBO] error en metodo listarPeriodoAcademico generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
	
	/**
	 * Metodo que establece el query del listado de periodos academicos
	 * */
	public StringBuffer estableceQuery(String operacion,String campo,String criterio){
		StringBuffer 			query 			= new StringBuffer();
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_BUSQUEDA)){
			if(campo.equalsIgnoreCase("todos")){
				query.append(" SELECT PERIODOACADEMICO_ID AS CODIGO,A.NOMBRE AS NOMBRE,B.NOMBRE AS ESTADO FROM "+schema+"PERIODO_ACADEMICO A");
				query.append(" INNER JOIN "+schema+"ESTADO B ON A.ESTADO_ID=B.ESTADO_ID");
				query.append(" WHERE PERIODOACADEMICO_ID>0");
			}else{
				query.append(" SELECT PERIODOACADEMICO_ID AS CODIGO,A.NOMBRE AS NOMBRE,B.NOMBRE AS ESTADO FROM "+schema+"PERIODO_ACADEMICO A");
				query.append(" INNER JOIN "+schema+"ESTADO B ON A.ESTADO_ID=B.ESTADO_ID");
				query.append(" WHERE PERIODOACADEMICO_ID>0");
				query.append(" AND UPPER("+campo.toUpperCase()+") LIKE '%"+criterio.toUpperCase()+"%'"); 
			}

		}
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_LISTADO)){
			query.append(" SELECT PERIODOACADEMICO_ID AS CODIGO,A.NOMBRE AS NOMBRE,B.NOMBRE AS ESTADO FROM "+schema+"PERIODO_ACADEMICO A");
			query.append(" INNER JOIN "+schema+"ESTADO B ON A.ESTADO_ID=B.ESTADO_ID");
			query.append(" WHERE PERIODOACADEMICO_ID>0");
		}
		System.out.println("[PeriodoAcademicoBO][estableceQuery] query:"+query.toString());
		return query;
	}
}
